//
//  LKSportMapViewController.m
//  SportDemo
//
//  Created by Lukj on 2017/4/21.
//  Copyright © 2017年 lukj. All rights reserved.
//

#import "LKSportMapViewController.h"
#import "LKSportPolyline.h"
@interface LKSportMapViewController ()<MAMapViewDelegate>

//  记录是否添加大头针(默认为NO)
@property (nonatomic, assign) BOOL isPoint;
@end

@implementation LKSportMapViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    _mapView = [[MAMapView alloc] initWithFrame:self.view.bounds];
    
    ///把地图添加至view
    [self.view addSubview:_mapView];
    //  设置地图属性
    [self setupMapView];
}


#pragma mark - set

- (void)setMapSelectType:(MapSelectType)mapSelectType {
    _mapSelectType = mapSelectType;
    //  设置地图类型
    _mapView.mapType = (MAMapType)mapSelectType;
    
}


#pragma mark - 设置地图属性
- (void)setupMapView {
    //  隐藏标尺
    _mapView.showsScale = NO;
    //  关闭3D旋转
    _mapView.rotateCameraEnabled = NO;
    
    //  如果您需要进入地图就显示定位小蓝点，则需要下面两行代码
    _mapView.showsUserLocation = YES;
    _mapView.userTrackingMode = MAUserTrackingModeFollow;
    
    //  是否允许后台定位。默认为NO。只在iOS 9.0之后起作用。设置为YES的时候必须保证 Background Modes 中的 Location updates处于选中状态，否则会抛出异常。
    _mapView.allowsBackgroundLocationUpdates = YES;
    //  指定定位是否会被系统自动暂停。默认为YES。只在iOS 6.0之后起作用。
    _mapView.pausesLocationUpdatesAutomatically = NO;
    
    //  设置代理
    _mapView.delegate = self;
}

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    //  使用其他视图传递尺寸时, 注意要在子视图布局完成以后再进行
    _mapView.compassOrigin = CGPointMake(_trackBtnCenter.x - _mapView.compassSize.width * 0.5, _trackBtnCenter.y - _mapView.compassSize.height * 0.5);
}



#pragma mark - MAMapViewDelegate
/**
 点击地图回调, 返回经纬度

 @param mapView 地图
 @param coordinate 经纬度
 */
//-(void)mapView:(MAMapView *)mapView didSingleTappedAtCoordinate:(CLLocationCoordinate2D)
//    coordinate {
//    
//    
//    //构造折线数据对象
//    CLLocationCoordinate2D commonPolylineCoords[2];
//    //  定位点
//    commonPolylineCoords[0].latitude = self.mapView.userLocation.location.coordinate.latitude;
//    commonPolylineCoords[0].longitude = self.mapView.userLocation.location.coordinate.longitude;
//    //  点击点
//    commonPolylineCoords[1].latitude = coordinate.latitude;
//    commonPolylineCoords[1].longitude = coordinate.longitude;
//    
//    //构造折线对象
//    MAPolyline *commonPolyline = [MAPolyline polylineWithCoordinates:commonPolylineCoords count:2];
//    
//    //在地图上添加折线对象
//    [_mapView addOverlay: commonPolyline];
//}


/**
 断开的时候调用

 @param mapView 地图
 @param error 错误
 */
- (void)mapView:(MAMapView *)mapView didFailToLocateUserWithError:(NSError *)error {
    
    [[NSNotificationCenter defaultCenter] postNotificationName:@"LKSprotGPSStateChangeNote" object:nil userInfo:@{@"LKSprotGPSStateChangeNoteGPSStateKey": @(SportMapGPSStateDisconnect)}];
}


/**
 已经更新到用户位置后调用

 @param mapView 地图
 @param userLocation 用户位置
 @param updatingLocation 标示是否是location数据更新, YES:location数据更新 NO:heading数据更新
 */
- (void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation updatingLocation:(BOOL)updatingLocation {
    //  过滤掉设备朝向发生改变的调用
    if (updatingLocation == NO) {
        return;
    }
    
    //  数据更新后始终让用户显示蓝点位置在地图中心点
    _mapView.centerCoordinate = userLocation.location.coordinate;
    
    if (self.isPoint == NO && self.track.pointAnnotation) {
        //  添加起点大头针到地图上
        [self.mapView addAnnotation:self.track.pointAnnotation];
        self.isPoint = YES;
    }
    
    //  生成新的折线 每一段的起点都是上一段的终点
    LKSportPolyline *newPolyline = [self.track appendPolylineDest:userLocation.location];
    //  添加折线到地图上
    [self.mapView addOverlay:newPolyline];
    
    //  位置更新后, 发送通知给控制器
    [[NSNotificationCenter defaultCenter] postNotificationName:@"LKSportLoactionDidUpdateNote" object:nil userInfo:@{@"LKSportLocationDidUpdateNoteAnimBtnKey": userLocation.location}];

}


/**
 设置地图覆盖物样式

 @param mapView 地图
 @param overlay 覆盖物
 @return 覆盖物样式
 */
- (MAOverlayRenderer *)mapView:(MAMapView *)mapView rendererForOverlay:(id <MAOverlay>)overlay
{
    if ([overlay isKindOfClass:[LKSportPolyline class]])
    {
        MAPolylineRenderer *polylineRenderer = [[MAPolylineRenderer alloc] initWithPolyline:overlay];
        //  线宽
        polylineRenderer.lineWidth    = 4.f;
        //  线的颜色
        LKSportPolyline *polyline = overlay;
        polylineRenderer.strokeColor  = polyline.polylineColor;
        //  拐角样式
        polylineRenderer.lineJoinType = kMALineJoinRound;
        //  头尾样式
        polylineRenderer.lineCapType  = kMALineCapRound;
        
        return polylineRenderer;
    }
    
    return nil;
}


/**
 设置地图大头针视图

 @param mapView 地图
 @param annotation 大头针
 @return 大头针视图
 */
- (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id <MAAnnotation>)annotation
{
    if ([annotation isKindOfClass:[MAPointAnnotation class]])
    {
        static NSString *pointReuseIndentifier = @"pointReuseIndentifier";
        MAPinAnnotationView*annotationView = (MAPinAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:pointReuseIndentifier];
        if (annotationView == nil)
        {
            annotationView = [[MAPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:pointReuseIndentifier];
        }
        //  设置大头针视图图片
        annotationView.image = [UIImage imageNamed:self.track.pointAnnotationImageName];
        annotationView.canShowCallout= YES;       //设置气泡可以弹出，默认为NO
        annotationView.animatesDrop = YES;        //设置大头针是否从天上掉下来
        //  设置大头针视图中心点偏移
        annotationView.centerOffset = CGPointMake(0, -annotationView.image.size.height * .5);
//        annotationView.pinColor = MAPinAnnotationColorPurple;
        return annotationView;
    }
    return nil;
}


@end
